Typically programs in a computing device provide a limited set of tools and resources that are specific to a particular application. Each program operates as a stand-alone component and is generally unaware of events occurring in other programs. As a result, programs work independently and not cooperatively. It is desirable to provide the ability for multiple programs to work cooperatively.